//package com.moyun.websocket.controller;
//
//import lombok.RequiredArgsConstructor;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.core.env.Environment;
//import org.springframework.messaging.handler.annotation.MessageMapping;
//import org.springframework.messaging.handler.annotation.SendTo;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.stereotype.Controller;
//
//import java.io.File;
//import java.io.IOException;
//import java.io.RandomAccessFile;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ScheduledExecutorService;
//import java.util.concurrent.TimeUnit;
//
///**
// * @ClassName LogViewController
// * @Description 根据文件大小实时读取数据
// * @Author yangboxuan
// * @Date 2021/6/26 18:04
// */
//@Controller
//@RequiredArgsConstructor
//public class LogViewController {
//
//    private final Environment environment;
//    private final SimpMessagingTemplate messagingTemplate;
//
//    private static final Logger log = LoggerFactory.getLogger(LogViewController.class);
//    //上次文件大小
//    private long lastTimeFileSize = 0;
//
//    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
//
//    ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
//
//    /**
//     * 实时输出日志信息
//     *
//     * @throws IOException
//     */
//    @MessageMapping("/hello3")
////    @SendTo("/topic/hello3")
//    public void realtimeShowLog() throws Exception {
//        // 获取系统中的日志文件名
//        String logFileName = environment.getProperty("log.file-path") +
//                new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/" +
//                environment.getProperty("log.file-name") + "-INFO-" +
//                new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".log";
//        //指定文件可读写
//        File logFile = new File(logFileName);
//        //启动一个线程每10秒钟读取新增的日志信息
//        realtimeShowLog(logFile);
//    }
//
//    /**
//     * @return void
//     * @Author yangboxuan
//     * @Description 实时读取日志文件
//     * @Date 2021/6/26 18:12
//     * @Param [logFile]
//     */
//    public void realtimeShowLog(File logFile) throws Exception {
//
//        if (logFile == null) {
//            throw new IllegalStateException("logFile can not be null");
//        }
//
//        //启动一个线程每2秒读取新增的日志信息
//        exec.scheduleWithFixedDelay(() -> {
//            //获得变化部分
//            try {
//                long len = logFile.length();
//                if (len < lastTimeFileSize) {
//                    log.info("Log file was reset. Restarting logging from start of file.");
//                    lastTimeFileSize = 0;
//                } else {
//
//                    //指定文件可读可写
//                    RandomAccessFile randomFile = new RandomAccessFile(logFile, "rw");
//
//                    //获取RandomAccessFile对象文件指针的位置，初始位置是0
//                    System.out.println("RandomAccessFile文件指针的初始位置:" + lastTimeFileSize);
//
//                    randomFile.seek(lastTimeFileSize);//移动文件指针位置
//
//                    String tmp = "";
//                    while ((tmp = randomFile.readLine()) != null) {
//                        this.messagingTemplate.convertAndSend("/topic/hello3",new String(tmp.getBytes("ISO8859-1")));
////                        System.out.println("info : " + new String(tmp.getBytes("ISO8859-1")));
//                    }
//                    lastTimeFileSize = randomFile.length();
//                    randomFile.close();
//                }
//            } catch (Exception e) {
//                //实时读取日志异常，需要记录时间和lastTimeFileSize 以便后期手动补充
//                log.error(dateFormat.format(new Date()) + " File read error, lastTimeFileSize: " + lastTimeFileSize);
//            } finally {
//                //将lastTimeFileSize 落地以便下次启动的时候，直接从指定位置获取
//            }
//        }, 0, 10, TimeUnit.SECONDS);
//
//    }
//
//    public void stop() {
//        if (exec != null) {
//            exec.shutdown();
//            log.info("file read stop ！");
//        }
//    }
//
//
//}
